Functional dependencies are an important property in a database. Within a relational database, a functional dependency exists between two attributes A and B in a relation if for every value of A in a tuple of the relation the same value of B exists in the tuple. In other words, within a relation, B is functionally dependant on A if for every value in A for which there is an instance in a tuple, the same value of B exists in the tuple. To illustrate functional dependencies, the following relation T1, with attributes C1, C2, C3, C4, and C5, is provided.
Relation T1C1C2C3C4C5APPLE10TREECAAAPPLE10BUSHCAAGRAPE20BUSHCABGRAPE20BUSHNYBORANGE30SHRUBNYC
For every value of C1 in a tuple, the same value of C2 exists in the tuple. For example, when C1=APPLE for a tuple, the value for C2 in the tuple is always 10. In other words, when C1=APPLE, then the value 10 is always returned for C2. Thus, C2 functionally depends on C1.
On the other hand, C4 is not dependant on C3. For example, when C3=BUSH in a tuple in T1, C4 can either be CA or NY.
When B functionally depends on A, A is referred to herein as determining B. In the case of relation T1, C1 determines C2. An attribute B that depends on an attribute A is represented using the following notation: (A)>>B.
An attribute can be functionally dependant on multiple attributes. A set of attributes upon which an attribute functionally depends is referred to herein as a determining set and is represented using the following notation (A1, A2, . . . An)>>B. For every unique combination of values for attributes A1-An, for which there is an instance in a tuple, the same value for B is returned.
B is minimally functionally dependent on A when there is no other attribute that functionally depends on A that B functionally depends on. Specifically, there is no attribute B′ such that (B′)>>B and (A)>>B′. For example, relation T1 has the functional dependencies (C1)>>C2 and (C2)>>C5. C1>>C5 is a valid functional dependency; however, it is not minimal.